import 'package:flutter/material.dart';
import 'package:xrenovation/localization/languages/en.dart';
import 'package:xrenovation/localization/languages/zh.dart';

/// 应用本地化类
///
/// 提供统一的翻译字符串访问接口，不维护具体翻译key，
/// 所有翻译通过translate方法动态获取
class AppLocalizations {
  // 所有支持的语言映射表
  static const Map<String, Map<String, String>> _localizedValues = {
    'en': en,
    'zh': zh,
  };

  // 默认语言(英语)
  static const Map<String, String> _defaultLanguage = en;

  /// 支持的语言列表
  static const List<String> supportedLanguages = ['en', 'zh'];

  final Locale locale;

  AppLocalizations(this.locale);

  /// 公共翻译方法
  ///
  /// @param key 翻译键
  /// @return 对应语言的翻译字符串，如果不存在则返回默认语言(en)的翻译或key
  String translate(String key) {
    return _localizedValues[locale.languageCode]?[key] ??
        _defaultLanguage[key] ??
        key;
  }

  /// 可空的翻译方法
  ///
  /// @param key 翻译键
  /// @return 对应语言的翻译字符串，如果不存在则返回null
  String? translateNullable(String key) {
    return _localizedValues[locale.languageCode]?[key];
  }

  /// 检查是否支持指定的语言代码
  ///
  /// @param languageCode 语言代码(如'en', 'zh')
  /// @return 如果支持该语言则返回true
  static bool isSupported(String languageCode) {
    return _localizedValues.containsKey(languageCode);
  }

  /// 从BuildContext中获取AppLocalizations实例
  static AppLocalizations of(BuildContext context) {
    final AppLocalizations? localizations = Localizations.of<AppLocalizations>(
      context,
      AppLocalizations,
    );

    // 开发环境检查
    assert(() {
      if (localizations == null) {
        debugPrint(
          'Warning: No AppLocalizations found in context, using default English',
        );
      }
      return true;
    }());

    // 生产环境兜底
    return localizations ?? AppLocalizations(const Locale('en'));
  }
}
